Auroraメジャーバージョンアップ時にパラメータグループが正常に適用されなかったので問題解決までに試したことをまとめてみた
どうもさいちゃんです。Amazon Aurora PostgreSQLのバージョンアップを行った際にパラメータグループを変更したのですが、再起動をしてもステータスが「再起動を保留中」から更新されないという事象が発生しました。本ブログでは、こちらの事象にどのように対処したのかについてまとめています。同じ事象でお困りの方の参考になればと思っています。
Aurora PostgreSQL DB クラスターのアップグレードに関しては下記ドキュメントを参考に進めました。
今回の構成
今回は下記のような構成のAurora PostgreSQL DBクラスターの11.9から12.17へのバージョンアップを行う予定でした。
- マルチAZ構成のAurora DBクラスター
- プライマリインスタンス1つ、Auroraレプリカ1つといった構成
- DBクラスターパラメータグループにカスタムパラメータグループを指定していた
バージョンアップの前提について
AuroraのパラメータグループはDBエンジンのバージョンによってパラメータグループファミリーが異なります。
DBパラメータグループやDBクラスターパラメータグループにカスタムパラメータグループを指定しているインスタンスのバージョンアップを行う際には、バージョン互換のパラメータグループを新たに作成し、アップグレード時に指定する必要があります。
また、アップグレード時に新しいパラメータグループを指定する場合の手順についてドキュメントに下記のような記載がありました。
アップグレードリクエストの一部として DB インスタンスまたは DB クラスターの新しいパラメータグループを関連付ける場合は、パラメータを適用するために必ず、アップグレードの完了後にデータベースを再起動してください。パラメータグループの変更を適用するために DB インスタンスを再起動する必要がある場合、インスタンスのパラメータグループのステータスは pending-reboot と表示されます。
Amazon Aurora PostgreSQL DB クラスターのアップグレード - Amazon Aurora
上記の内容をまとめると以下の通りです。
- 新たなパラメータグループをインスタンスに適用した場合はインスタンスを一度再起動する必要がある。
- 再起動が必要な(変更したパラメータが適用されていない)インスタンスには、パラメータグループの状態として「pending-reboot(再起動を保留中)」と記載される。
上記をふまえた上で、今回はバージョン互換のパラメータグループを作成し、バージョンアップ時に指定することにしました。
バージョンアップ手順
バージョンアップ時に行った手順は下記のとおりです。
- アプリケーションを停止する
- スナップショットの取得
- イベントサブスクリプションをOFF
- DBクラスターのバージョンアップ
- パラメータグループの指定
- ライターインスタンス再起動(パラメータグループ設定反映のため)
- イベントサブスクリプションをON
- 動作確認
この5. ライターインスタンス再起動(パラメータグループ設定反映のため) の部分で問題の事象が発生しました。
起きた事象
バージョンアップ時に指定し、ライターインスタンスの再起動を行ったのですが、通常「適用中」となるはずのパラメータグループのステータスが、「再起動を保留中」のままとなってしまいました。
今回のアップグレード前に同じ構成のDBクラスターを検証用に作成し、バージョンアップの検証を行ったのですが、その際には問題なくパラメータグループが反映されてました。
対処内容
新しいインスタンスを追加して問題のインスタンスは削除する
- フェイルオーバーを行い、問題ないインスタンスをライターインスタンスにする
- 問題のあるインスタンス(再起動を保留中)を削除する
- 新しくリーダーインスタンスをDBクラスターへ追加する
- 新規のインスタンスのDBクラスターパラメータグループが正常に適用できていることを確認する
- 再度フェイルオーバーを行い、新規に作成したインスタンスをライターインスタンスにする
今回はこちらの方法で、DBクラスター内のすべてのインスタンスでDBクラスターパラメータグループが正常に適用されました。
こちらの方法で対処を行う場合、新しくリーダーインスタンスを追加する際に必要な設定情報をキャプチャなどで記録しておくと、設定に相違がないかの確認作業を簡単に行うことが出来るので楽です。
パラメータシートを確認しながら作業を行うのがよいですが、さらにキャプチャをとっておいて、再度確認しておくと安心して切り替えを行うことが出来ると思います。
ライターインスタンスを直接削除する方法
上記の方法では、先に手動でフェイルオーバーを行ってから、問題のインスタンスの削除を行いました。
フェイルオーバーを行わずに、ライターインスタンスを直接削除する事も出来るのでしょうか?
先に結論から述べると、可能です。
下記に記載がある通り、手動でフェイルオーバーは行わずに、問題のライターインスタンスを削除してしまった場合、Auroraは自動でフェイルオーバーをしてくれます。
DB クラスターのプライマリインスタンスが失敗した場合、Aurora は次の2つの方法のいずれかで、新しいプライマリインスタンスに自動的にフェイルオーバーします。
- 既存の Aurora レプリカを新しいプライマリインスタンスに昇格する
- 新しいプライマリインスタンスを作成する
しかし、本番環境でこのような事象が起きた場合には、万が一のことを考えて今回私が試したように、手動でフェイルオーバーを行う方法で行う方が丁寧かつ安全にインスタンスの切り替えが出来ると思います。
インスタンスの削除とフェイルオーバーという2つの処理を同時に行い、どちらかの処理がうまくいかなかった場合のリスクを考えると本番環境ではプロセスを分けて丁寧に作業をした方が、問題が発生する確率を下げることが出来ます。
他に試した事
- 再起動を何度か試してみる
- 時間を置きながら数回試してみましたが、ステータスは再起動を保留中から変わらずでした。
- フェイルオーバーを行ってから再起動
- フェイルオーバーを行い、問題ないインスタンスをライターインスタンスにする
- 問題のあるインスタンスを再起動してみる
- 再度フェイルオーバーを行い、ライターインスタンスを元に戻す
- 上記を行ってみましたが、ステータスは変わりませんでした。
振り返り
今回はコンソールからしかDBクラスターパラメータグループのステータスを確認しなかったのですが、同じ事象が起きた際には、CLIでの確認もしてみるといいかもしれません。 CLIからDBクラスタパラメータグループのステータスを確認するコマンドは以下になります。
aws rds describe-db-clusters --region リージョン
コマンド実行結果の中の"DBClusterMembers"
の"DBClusterParameterGroupStatus"
から確認できます。
ここのステータスがコンソールから確認したときと同じように、「 pending-reboot (再起動の保留中) 」となっている場合は、DBインスタンスを作り直してみるのも解決方法の一つとなります。
最後に
今回はAmazon Aurora PostgreSQLのバージョンアップ時にインスタンスを再起動をしてもステータスが再起動を保留中から更新されないという事象についてとどのように対処したのかについてまとめてみました。
AWSサポートへ連絡するという手もありますが、その間DBが正常に動作しない可能性もあります。そういった場合の手段として、今回の対処方法が参考になればと思います。